var app = require('express')();
var server = require('http').Server(app);
var WebSocket = require('ws');

// 服务端监socket监听在8080 等待客户端连接
var wss = new WebSocket.Server({ port: 8080 });

// 准备客户端存储对象
const clients = {}

/* 有客户端请求接入 入参ws即为接入的客户端socket对象 */
wss.on('connection', function connection(ws) {
    console.log('server: receive connection from client');

    // 将该客户端存下来 时间戳:socket
    clients[Date.now()] = ws
    console.log("clients",Object.keys(clients));
    
    // 接收到该客户端发来的消息
    ws.on('message', function incoming(message) {
        console.log('message',message);
        ws.send('got it:'+message);

        // 转发给它想要发送的其它客户端
        const [to,msg] = message.toString().split(":")
        clients[to*1].send(message.toString())
    });

    // 该客户端主动断开连接
    ws.on("close",function(code,reason){
        console.log("客户端已断开连接");
    })

    // 与该客户端的连接发送错误
    ws.on("error",function(err){
        //处理错误
    })

    // 立刻给刚刚接入的客户端发送消息
    ws.send('welcome!');
});

/* 在http的3000端口返回页面给客户端 */
app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

app.listen(3000);